package ar.edu.utn.frgp.labtec.entities;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity()
@Table(name = "USUARIO")
public class Usuario implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "NOMBRE")
	private String nombre;

	@Column(name = "CONTRASENIA")
	private String contrasenia;

	@Column(name = "MAIL")
	private String mail;

	// A=admin, L=labtec
	@Enumerated(EnumType.STRING)
	@Column(name = "TIPO_PERMISO")
	private TipoPermisoEnum permiso;

	// H= habilitado, I=inhabilitado
	@Enumerated(EnumType.STRING)
	@Column(name = "ESTADO")
	private EstadoEnum estado;
	
	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "usuario_laboratorio", joinColumns = { @JoinColumn(name = "usuarios_NOMBRE") }, inverseJoinColumns = { @JoinColumn(name = "laboratorios_COD_DEPTO"), @JoinColumn(name = "laboratorios_COD_LAB") })
	private List<Laboratorio> laboratorios;

	// ############ EQUALS ############
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Usuario other = (Usuario) obj;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		return true;
	}

	// ############ CONSTRUCTOR ############
	public Usuario() {

	}
	
	public Usuario(String nombre, String contrasenia, String mail,
			TipoPermisoEnum permiso, EstadoEnum estado,
			List<Laboratorio> laboratorios) {
		super();
		this.nombre = nombre;
		this.contrasenia = contrasenia;
		this.mail = mail;
		this.permiso = permiso;
		this.estado = estado;
		this.laboratorios = laboratorios;
	}

	// ############ GETTERS Y SETTERS ############
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getContrasenia() {
		return contrasenia;
	}

	public void setContrasenia(String contrasenia) {
		this.contrasenia = contrasenia;
	}

	public String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public TipoPermisoEnum getPermiso() {
		return permiso;
	}

	public void setPermiso(TipoPermisoEnum permiso) {
		this.permiso = permiso;
	}

	public EstadoEnum getEstado() {
		return estado;
	}

	public void setEstado(EstadoEnum estado) {
		this.estado = estado;
	}

	public List<Laboratorio> getLaboratorios() {
		return laboratorios;
	}

	public void setLaboratorios(List<Laboratorio> laboratorios) {
		this.laboratorios = laboratorios;
	}
}
